• 미국 Ames에 집 매매 예산안 구성
    • 주택 가격
    • 클로징 비용 : 바이어와 셀러가 지불하는 비용
    • 유지 및 관리 비용 : 구매한 후에 들어가는 유지 및 관리 비용



- 미국 연간 유지비용에 대한 권장사항은 주택 원래 가격의 1.5% ~ 4%까지 다양함.
ex) 70만 달러에 주택을 구매한다면 연간 10,500~28,000 달러를 유지비로 지출

📍 유지 및 관리 비용 ⬇ 매매 가격 ⬇ 집을 찾아보자!

👀 ” 저렴한 집값만 보고 샀다가 유지비 폭탄?”

프로젝트 목적 : 지금 당장 드러나는 가격뿐 아니라, 장기적인 유지 비용까지 고려한 ’진짜 합리적인 집 구매’를 꿈꾸는 사람들을 위한 Ames 부동산 분석 프로젝트

품질 / 상태

14

면적

5

욕실

4

연도

3

  • OverallQual
  • OverallCond
  • RoofStyle
  • ExterQual
  • ExterCond
  • Exterior1st
  • HeatingQC
  • GarageCond
  • BsmtCond
  • BsmtQual
  • KitchenQual
  • GarageQual
  • Foundation
  • PavedDrive
  • GrLivArea
  • TotalBsmtSF
  • GarageArea
  • WoodDeckSF
  • TotRmsAbvGrd
  • FullBath
  • HalfBath
  • BsmtFullBath
  • BsmtHalfBath
  • YearBuilt
  • YearRemodAdd
  • GarageYrBlt
Text(0.5, 1.0, 'Average Sale Price by Year Built')
Text(0.5, 0, 'Year Built')
Text(0, 0.5, 'Average Sale Price')
  • 지하실 및 차고가 없는 경우는 'None'으로 채운 후, Ordinal Encoding을 통해 수치화함.

  • 차고 건축 연도(GarageYrBlt), 지하실 욕실 등 일부 수치형 결측치는 0으로 처리함.

  • 최종적으로 37개 주요 변수 추출함.

  • 감성적 특성과 관계된 30여 개 변수 선정

  • 품질/상태, 면적, 위치, 연도, 욕실 수 등 포함

  • 종속변수는 SalePrice 사용

  • GarageCond, BsmtCond, BsmtQual, GarageQual
    → 결측 = 해당 항목 없음 → "None"으로 처리

  • GarageYrBlt, BsmtFullBath, BsmtHalfBath, TotalBsmtSF, GarageArea
    → 결측 = 구조물 없음 → 0으로 대체

    1. 범주형 변수 수치화
  • Ordinal Encoding

  • 품질/상태 관련: "None"=0, "Po"=1 ~ "Ex"=5

  • 대상 변수: ExterQual, HeatingQC, KitchenQual, 등

  • RoofStyle, Exterior1st, Foundation, PavedDrive
    pd.get_dummies로 처리 (기준값 제외)

Text(0.5, 0, 'Coefficient Value')
Text(0.5, 1.0, 'LassoCV - Selected Feature Coefficients')
    1. LassoCV 기반 변수 선택
    • 다중공선성을 고려하여 LassoCV (5-Fold Cross Validation) 를 적용.
    • 최적의 alpha(209)를 기준으로 변수 축소.

    1. 상관계수 절대값 기반 변수 선택
    • 절대값을 기준으로 상위 10개인 상관계수 변수 선택.
Text(0.5, 0, 'Alpha')
Text(0, 0.5, 'Number of Selected Features')
Text(0.5, 1.0, 'Alpha 값에 따른 변수 선택 개수 변화')
모델 Adj. R-squared AIC
Model 1 0.852 58050
Model 2 0.853 58030
  • 최종 변수 ‘GrLivArea’, ‘TotalBsmtSF’, ‘GarageArea’, ‘OverallQual’, ‘KitchenQual’, ‘BsmtQual’, ‘ExterQual’, ‘OverallCond’, ‘BsmtFullBath’, ‘YearBuilt’
Best alpha: 1.0
Best CV Score (MSE): 842496338.639763
        Feature   Coefficient
0     GrLivArea  28509.204148
1   OverallQual  16064.129906
2   TotalBsmtSF  15064.054441
4     YearBuilt   8264.238236
7     ExterQual   8246.379869
6  BsmtFullBath   7591.288208
3    GarageArea   7441.589696
5   OverallCond   6397.928780
9   KitchenQual   5902.946895
8      BsmtQual    215.144143

📌 점수화 과정

✔️ 10개 선정된 변수들 사이에서 이상치 체크
✔️ MinMaxScaler 적용하기
✔️ 면적, 품질, 상태, 연식 score로 만들기
✔️ score 별 가중치 곱하고 합산 진행
✔️ 가중치 컬럼(MaintenanceScore)을 만들기

  • 선정한 10개 변수들 사이 이상치를 확인
  • GrLivArea, GarageArea, TotalBsmtSF에서 이상치 제거
  • MinMaxScaler를 적용하기
    • 단위가 제각각일 경우 연산이나 거리 기반 계산을 할때 영향을 크게 받는 변수가 왜곡 될 수 있음.
    • 서로 다른 단위를 갖는 변수들을 동일한 범위(0~1)로 스케일링하여 비교 가능하게 만들기 위해서!
    • 최소값은 0, 최대값은 1로 맞춰주는 방식
  • 각 변수들을 면적, 품질, 상태, 연식으로 구성
    • area_score(면적) : ‘GrLivArea’, ‘TotalBsmtSF’, ‘GarageArea’
    • quality_score(품질) : ‘OverallQual’, ‘KitchenQual’, ‘BsmtQual’, ‘ExterQual’
    • condition_score(상태) : ‘OverallCond’, ‘BsmtFullBath’
    • year_score(연식) : ‘YearBuilt’


  • 각 score를 아래와 같이 계산
    • area_score = df_clean[‘GrLivArea’] + df_clean[‘TotalBsmtSF’] + df_clean[‘GarageArea’]
    • quality_score = (1 - df_clean[‘OverallQual’]) + (1 - df_clean[‘KitchenQual’]) + (1 - df_clean[‘BsmtQual’]) + (1 - df_clean[‘ExterQual’])
    • condition_score = (1 - df_clean[‘OverallCond’]) + (1 - df_clean[‘BsmtFullBath’])
    • year_score = 1 - df_clean[‘YearBuilt’]
  • quality_scoreyear_score에 조금 더 비중을 둬서 가중치 진행


  • 가중치를 둬서 계산 진행

    • df[‘MaintenanceScore’] = area_score * 0.2 + quality_score * 0.3 + condition_score * 0.2 + year_score * 0.3

  • MaintenanceScore을 A(최우수),B(양호),C(개선필요),D(시급)으로 구분

  • MaintenanceScore 높다는 것은 가격대비 유지보수가 높다는 것
    => 해당 집은 피해야하는 집!

  • MaintenanceScore 의 평균과 표준편차를 활용하여 등급을 나누기

    • MaintenanceScore >= mean + std ==> D (시급)
    • MaintenanceScore >= mean ==> C (개선필요)
    • MaintenanceScore >= mean - std ==> B (양호)
    • MaintenanceScore 그 외 ==> A (최우수)
  • 왜? 평균과 표준편차를 활용하는 걸까?

    • 분포의 중심값(평균)을 기준으로 판단하니, 전체 데이터 비교에 유리
    • 절대값 기준보다 덜 왜곡됨
등급 구간 별 분포
A등급 중 가격이 낮은 상위 10개 집
OverallQual ExterQual KitchenQual YearBuilt BsmtFullBath GrLivArea TotalBsmtSF GarageArea WoodDeckSF RoofStyle_Hip
2032 6 3 4 2002 1.0 914 914.0 0.0 32 False
2120 5 4 4 1963 1.0 912 912.0 300.0 0 False
1849 7 4 4 2004 0.0 1709 970.0 380.0 0 False
1493 7 4 4 2004 0.0 1708 976.0 380.0 0 False
1989 5 4 4 1982 0.0 816 816.0 264.0 0 False
1972 6 4 4 2003 1.0 848 848.0 420.0 140 False
1504 6 4 4 2003 1.0 848 848.0 420.0 140 False
1506 7 4 4 2004 0.0 1709 970.0 380.0 0 False
2059 6 4 4 2003 1.0 848 848.0 420.0 140 False
1794 7 4 4 2004 0.0 1709 970.0 380.0 0 False
등급 별 분포 지도 시각화
지역별 평균 MaintenanceScore
Text(0.5, 1.0, 'Neighborhood-wise Average Maintenance Score')
지역 별 가장 많이 분포된 유지보수 등급
등급 별 평균 SalePrice